% Copyright (c) 2016 Paul Irofti <paul@irofti.net>
% 
% Permission to use, copy, modify, and/or distribute this software for any
% purpose with or without fee is hereby granted, provided that the above
% copyright notice and this permission notice appear in all copies.
% 
% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

function X = ompreg(Y,D,X,mu)
%% Use sparse pattern from OMP to compute new sparse representations
% INPUTS:
%   Y -- training signals set
%   D -- current dictionary
%   X -- sparse representations
%   mu -- regularization factor
%
% OUTPUTS:
%   X -- new representations

    for j = 1:size(Y,2)
		yj = Y(:,j);
		data_indices = find(X(:,j));
		Dj = D(:,data_indices);
		xj = (Dj'*Dj + mu * eye(size(Dj,2)))\(Dj'*yj);
		X(data_indices,j) = xj;
    end
end